//23.5.2 每日温度的方法重写
#include <algorithm>
#include <iostream>
#include <unordered_map>
#include <vector>
#include <stack>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<int> vt(n, -1);
    for (int i = 0; i < n; i++)
    {
        cin >> vt[i];
    }
    vector<int> res(n, -1);
    unordered_map<int, int> u_map;
    stack<pair<int, int>> st;
    for (int i = vt.size() - 1; i >= 0; i--)
    {
        while (!st.empty())
        {
            auto t = st.top();
            if (vt[i] < t.first)
            {
                st.pop();
                res[t.second] = vt[i];
            }
            else
                break;
        }
        st.push({vt[i], i});
    }
    for (auto e : res)
    {
        cout << e << ' ';
    }
    return 0;
}
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
// 关键点是左边第一个,如果新来的比之前的大入栈
// 如果新来的比之前的小,就不停出栈往下面找比自己小的
//(出栈丢弃是因为如果栈顶的比新来的大,后面即将加入元素的左边第一个比它小的只可能是这个新来的)
stack<int> st;
vector<int> nums;
vector<int> res;
int main()
{
    int m;
    cin >> m;
    while (m--)
    {
        int x;
        cin >> x;
        nums.push_back(x);
    }
    for (auto e : nums)
    {
        if (st.empty())
        {
            res.push_back(-1);
        }
        else
        {
            if (st.top() < e)
            {
                res.push_back(st.top());
            }
            // 所有比e大的都可以不要了
            else
            {
                while (!st.empty() && st.top() >= e)
                {
                    st.pop();
                }
                res.push_back(st.empty() ? -1 : st.top());
            }
        }
        st.push(e);
    }
    for (auto e : res)
    {
        cout << e << ' ';
    }
    return 0;
}